# Makefile for State Machine Demo
# 状态机演示程序编译文件

# 编译器设置
CC = gcc
CFLAGS = -Wall -Wextra -std=c99 -g -O2
LDFLAGS = 

# 目录设置
SRCDIR = .
OBJDIR = obj
BINDIR = bin

# 源文件和目标文件
SOURCES = $(wildcard $(SRCDIR)/*.c)
OBJECTS = $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
TARGET = $(BINDIR)/state_machine_demo

# 默认目标
all: $(TARGET)

# 创建目录
$(OBJDIR):
	mkdir -p $(OBJDIR)

$(BINDIR):
	mkdir -p $(BINDIR)

# 编译目标文件
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
	$(CC) $(CFLAGS) -c $< -o $@

# 链接可执行文件
$(TARGET): $(OBJECTS) | $(BINDIR)
	$(CC) $(OBJECTS) $(LDFLAGS) -o $@

# 运行程序
run: $(TARGET)
	./$(TARGET)

# 自动演示模式
demo: $(TARGET)
	./$(TARGET) -auto

# 清理编译文件
clean:
	rm -rf $(OBJDIR) $(BINDIR)

# 重新编译
rebuild: clean all

# 安装程序 (可选)
install: $(TARGET)
	cp $(TARGET) /usr/local/bin/state_machine_demo

# 卸载程序 (可选)
uninstall:
	rm -f /usr/local/bin/state_machine_demo

# 显示帮助信息
help:
	@echo "可用的 make 目标:"
	@echo "  all      - 编译程序 (默认)"
	@echo "  run      - 编译并运行程序"
	@echo "  demo     - 编译并运行自动演示模式"
	@echo "  clean    - 清理编译文件"
	@echo "  rebuild  - 重新编译"
	@echo "  install  - 安装程序到系统"
	@echo "  uninstall- 从系统卸载程序"
	@echo "  help     - 显示此帮助信息"

# 声明伪目标
.PHONY: all run demo clean rebuild install uninstall help